package com.atguigu.boot.config;

import com.atguigu.boot.bean.Pig;
import com.atguigu.boot.bean.Sheep;
import com.atguigu.boot.bean.User;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Scope;

/**
 * Copyright 2025 ZS Network Co., Ltd. All rights reserved.
 * 本文件仅限于正数网络技术有限公司内部传阅，禁止外泄以及用于其他的商业目的。
 * Created by zwn on 2025/7/27.
 * @description:
 */
//@Import(FastsqlException.class) // 给容器中放指定类型的组件，组件的名字默认是全类名

/**
 * 1 开启sheep的属性绑定
 * 2 给容器中注册一个sheep
 */
@EnableConfigurationProperties(Sheep.class) //导入第三方写好的组件进行属性绑定，springboot默认只扫描自己主程序所在的包及子包下的组件，
// 如果导入第三方包，即使组件上标注了@Component @ConfigurationProperties 也没用，因为组件都扫描不进来
@SpringBootConfiguration  //效果和@Configuration一样
//@Configuration //这是一个配置类，替代之前的配置文件，配置类本身也是容器中的组件
public class AppConfig {

    /**
     * 组件默认是单实例的
     * @return
     */
    @Scope("prototype")
    @Bean("user001") //替代之前的额配置文件中的bean标签，配置类中的方法名就是bean标签的id，也可以直接修改注解的值
    public User getUser(){

        var user = new User();
        user.setId(1L);
        user.setName("zhagnsan");
        return user;
    }

//    @Bean
//    public FastsqlException fastsqlException(){
//        return new FastsqlException();
//    }
    @ConfigurationProperties(prefix = "pig")
    @Bean
    public Pig pig(){
        return new Pig();
    }

}
